RDSインスタンスをスナップショットからリストアする際に、元のインスタンスと同じエンドポイントにする方法
困っていた内容
アプリケーション側で設定している、接続先エンドポイントを変更したくない要件があります。
RDS インスタンスをスナップショットからリストアする対応が必要となりました。
リストアしたインスタンスのエンドポイントを、アプリケーション側で設定しているエンドポイントに指定する方法はありますか?
前提となる知識
RDS におけるエンドポイント名は以下の形式となります。
<インスタンス識別子>.<アカウントの特定の地域の固定識別子>.<リージョン名>.rds.amazonaws.com
例:東京リージョンに、インスタンス識別子 sample を作成した場合のエンドポイント
sample.abcd1234cdef.ap-northeast-1.rds.amazonaws.com
そのため、同一アカウント内、同一リージョン、同一識別子であれば、エンドポイントは同じとなります。
どう対応すればいいの?
スナップショットからリストアをする際に、既存のインスタンス識別子を指定することはできません。
しかしながら、既存のインスタンス識別子を変更することは可能です。
以下の手順を行うことで、スナップショットからリストアした RDS インスタンスで、既存のインスタンスのエンドポイントを指定することが可能です。
1. 使用中のRDSインスタンスの識別子を変更する
2.スナップショットからリストアする。リストア時に元のインスタンスの識別子を指定する
注意:RDS インスタンス識別子を変更してから、スナップショットのリストアまでの間、ダウンタイムが発生します。
やってみた
RDS インスタンスの識別子を sample としてインスタンスを作成します。
スナップショットを取得します。
スナップショットから、識別子 sample として復元を試みますが、すでに存在する識別子を指定しているため、復元できませんでした。
sample の名前を sample-namechanged へ変更します。(この時点でアプリケーションから RDS インスタンスへの接続ができなくなります。)
インスタンスのエンドポイント名は sample-namechanged.■■■■■■■■■■■■.ap-northeast-1.rds.amazonaws.com
へ変わりました。
スナップショットから、識別子 sample として復元します。
復元され、インスタンスのエンドポイントはsample.■■■■■■■■■■■■.ap-northeast-1.rds.amazonaws.com
となりました。
参考資料
20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Amazon RDS)